<!doctype html>
<html class="default no-js">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>@aws/dynamodb-data-marshaller</title>
	<meta name="description" content="">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="assets/css/main.css">
</head>
<body>
<header>
	<div class="tsd-page-toolbar">
		<div class="container">
			<div class="table-wrap">
				<div class="table-cell" id="tsd-search" data-index="assets/js/search.js" data-base=".">
					<div class="field">
						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
						<input id="tsd-search-field" type="text" />
					</div>
					<ul class="results">
						<li class="state loading">Preparing search index...</li>
						<li class="state failure">The search index is not available</li>
					</ul>
					<a href="index.html" class="title">@aws/dynamodb-data-marshaller</a>
				</div>
				<div class="table-cell" id="tsd-widgets">
					<div id="tsd-filter">
						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
						<div class="tsd-filter-group">
							<div class="tsd-select" id="tsd-filter-visibility">
								<span class="tsd-select-label">All</span>
								<ul class="tsd-select-list">
									<li data-value="public">Public</li>
									<li data-value="protected">Public/Protected</li>
									<li data-value="private" class="selected">All</li>
								</ul>
							</div>
							<input type="checkbox" id="tsd-filter-inherited" checked />
							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
							<input type="checkbox" id="tsd-filter-externals" checked />
							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
						</div>
					</div>
					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
				</div>
			</div>
		</div>
	</div>
	<div class="tsd-page-title">
		<div class="container">
			<ul class="tsd-breadcrumb">
				<li>
					<a href="globals.html">Globals</a>
				</li>
			</ul>
			<h1> @aws/dynamodb-data-marshaller</h1>
		</div>
	</div>
</header>
<div class="container container-main">
	<div class="row">
		<div class="col-8 col-content">
			<div class="tsd-panel tsd-typography">
				<h1 id="amazon-dynamodb-data-marshaller">Amazon DynamoDB Data Marshaller</h1>
				<p><a href="http://aws.amazon.com/apache-2-0/"><img src="https://img.shields.io/github/license/awslabs/dynamodb-data-mapper-js.svg?style=flat" alt="Apache 2 License"></a></p>
				<p>This library provides an <code>marshallItem</code> and <code>unmarshallItem</code> functions that
					convert native JavaScript values to DynamoDB AttributeValues and back again,
					respectively, based on a defined schema. While many JavaScript values map
					cleanly to DynamoDB data types and vice versa, schemas allow you to losslessly
					persist any JavaScript type, including dates, class instances, and empty
				strings.</p>
				<h2 id="getting-started">Getting started</h2>
				<p>To use the data marshaller, begin by defining a schema that describes the
					relationship between your application&#39;s domain objects and their serialized form
				in a DynamoDB table:</p>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> schema = {
    <span class="hljs-attr">foo</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Binary'</span>},
    <span class="hljs-attr">bar</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Boolean'</span>},
    <span class="hljs-attr">baz</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>},
    <span class="hljs-attr">quux</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'Document'</span>,
        <span class="hljs-attr">members</span>: {
            <span class="hljs-attr">fizz</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Set'</span>, <span class="hljs-attr">memberType</span>: <span class="hljs-string">'String'</span>},
            <span class="hljs-attr">buzz</span>: {
                <span class="hljs-attr">type</span>: <span class="hljs-string">'Tuple'</span>,
                <span class="hljs-attr">members</span>: [
                    {
                        <span class="hljs-attr">type</span>: <span class="hljs-string">'List'</span>,
                        <span class="hljs-attr">memberType</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Set'</span>, <span class="hljs-attr">memberType</span>: <span class="hljs-string">'Number'</span>},
                    },
                    {
                        <span class="hljs-attr">type</span>: <span class="hljs-string">'Map'</span>,
                        <span class="hljs-attr">memberType</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Date'</span>},
                    }
                ]
            },
        },
    },
};
</code></pre>
				<p>This schema may be used to marshall JavaScript values to DynamoDB attribute
				values:</p>
				<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> {marshallItem} <span class="hljs-keyword">from</span> <span class="hljs-string">'@aws/dynamodb-data-marshaller'</span>;

<span class="hljs-keyword">const</span> marshalled = marshallItem(schema, {
    <span class="hljs-attr">foo</span>: <span class="hljs-built_in">Uint8Array</span>.from([<span class="hljs-number">0xde</span>, <span class="hljs-number">0xad</span>, <span class="hljs-number">0xbe</span>, <span class="hljs-number">0xef</span>]),
    <span class="hljs-attr">bar</span>: <span class="hljs-literal">false</span>,
    <span class="hljs-attr">baz</span>: <span class="hljs-string">''</span>,
    <span class="hljs-attr">quux</span>: {
        <span class="hljs-attr">fizz</span>: <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>([<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>]),
        <span class="hljs-attr">buzz</span>: [
            [
                <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>([<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>]),
                <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>([<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>]),
                <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>([<span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]),
            ],
            <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>([
                [<span class="hljs-string">'now'</span>, <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>()],
                [<span class="hljs-string">'then'</span>, <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>(<span class="hljs-number">0</span>)],
            ]),
        ]
    }
});
</code></pre>
				<p>The schema can also be used to unmarshall DynamoDB attribute values back to
				their original JavaScript representation:</p>
				<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> {unmarshallItem} <span class="hljs-keyword">from</span> <span class="hljs-string">'@aws/dynamodb-data-marshaller'</span>;

<span class="hljs-keyword">const</span> unmarshalled = unmarshallItem(schema, {
    <span class="hljs-attr">foo</span>: {<span class="hljs-attr">B</span>: <span class="hljs-built_in">Uint8Array</span>.from([<span class="hljs-number">0xde</span>, <span class="hljs-number">0xad</span>, <span class="hljs-number">0xbe</span>, <span class="hljs-number">0xef</span>])},
    <span class="hljs-attr">bar</span>: {<span class="hljs-attr">BOOL</span>: <span class="hljs-literal">false</span>},
    <span class="hljs-attr">baz</span>: {<span class="hljs-attr">NULL</span>: <span class="hljs-literal">true</span>},
    <span class="hljs-attr">quux</span>: {
        <span class="hljs-attr">fizz</span>: {<span class="hljs-attr">SS</span>: [<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>]},
        <span class="hljs-attr">buzz</span>: {
            <span class="hljs-attr">L</span>: [
                L: [
                    {<span class="hljs-attr">NS</span>: [<span class="hljs-string">'1'</span>, <span class="hljs-string">'2'</span>, <span class="hljs-string">'3'</span>]},
                    {<span class="hljs-attr">NS</span>: [<span class="hljs-string">'2'</span>, <span class="hljs-string">'3'</span>, <span class="hljs-string">'4'</span>]},
                    {<span class="hljs-attr">NS</span>: [<span class="hljs-string">'3'</span>, <span class="hljs-string">'4'</span>, <span class="hljs-string">'5'</span>]},
                ],
                <span class="hljs-attr">M</span>: {
                    <span class="hljs-attr">now</span>: {<span class="hljs-attr">N</span>: <span class="hljs-string">'1507189047'</span>},
                    <span class="hljs-attr">then</span>: {<span class="hljs-attr">N</span>: <span class="hljs-string">'0'</span>}
                },
            ],
        },
    },
});
</code></pre>
				<h2 id="specifying-keys">Specifying keys</h2>
				<p>DynamoDB tables must define a hash key and may optionally define a range key. In
					DynamoDB documentation, these keys are sometimes referred to as <em>partition</em> and
					<em>sort</em> keys, respectively. To declare a property to be a key, add a <code>keyType</code>
					property to its property schema (example taken from the <a href="http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html">DynamoDB developer
				guide</a>):</p>
				<pre><code class="lang-javascript"><span class="hljs-comment">// Table model taken from http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html</span>
<span class="hljs-keyword">const</span> gameScores = {
    <span class="hljs-attr">UserId</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>,
        <span class="hljs-attr">keyType</span>: <span class="hljs-string">'HASH'</span>
    },
    <span class="hljs-attr">GameTitle</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>,
        <span class="hljs-attr">keyType</span>: <span class="hljs-string">'RANGE'</span>
    },
    <span class="hljs-attr">TopScore</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>},
    <span class="hljs-attr">TopScoreDateTime</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Date'</span>},
    <span class="hljs-attr">Wins</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>},
    <span class="hljs-attr">Losses</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>}
};
</code></pre>
				<p>The <code>keyType</code> attribute may only be used in types that are serialized as
					strings, numbers, or binary attributes. In addition to <code>&#39;String&#39;</code>, <code>&#39;Number&#39;</code>,
				and <code>&#39;Binary&#39;</code> properties, it may be used on <code>&#39;Date&#39;</code> and <code>&#39;Custom&#39;</code> properties.</p>
				<p>Index keys are specified using an object mapping index names to the key type as
					which the value is used in a given index. To continue with the <code>gameScores</code>
					example given above, you could add the index key declarations described in <a href="http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html">the
					DynamoDB Global Secondary Index developer guide</a>
				as follows:</p>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> gameScores = {
    <span class="hljs-attr">UserId</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>,
        <span class="hljs-attr">keyType</span>: <span class="hljs-string">'HASH'</span>
    },
    <span class="hljs-attr">GameTitle</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>,
        <span class="hljs-attr">keyType</span>: <span class="hljs-string">'RANGE'</span>,
        <span class="hljs-attr">indexKeyConfigurations</span>: {
            <span class="hljs-attr">GameTitleIndex</span>: <span class="hljs-string">'HASH'</span>
        }
    },
    <span class="hljs-attr">TopScore</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>,
        <span class="hljs-attr">indexKeyConfigurations</span>: {
            <span class="hljs-attr">GameTitleIndex</span>: <span class="hljs-string">'RANGE'</span>
        }
    },
    <span class="hljs-attr">TopScoreDateTime</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Date'</span>},
    <span class="hljs-attr">Wins</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>},
    <span class="hljs-attr">Losses</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>}
};
</code></pre>
				<h2 id="supplying-defaults">Supplying defaults</h2>
				<p>Any property schema may define a <code>defaultProvider</code> function to be called when a
					field is <code>undefined</code> in the input provided to <code>marshallItem</code>. This function must
					return a raw JavaScript value and should not return an already-marshalled
				DynamoDB AttributeValue shape.</p>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> uuidV4 = <span class="hljs-built_in">require</span>(<span class="hljs-string">'uuid/v4'</span>);

<span class="hljs-keyword">const</span> schema = {
    <span class="hljs-attr">key</span>: {
        <span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>,
        <span class="hljs-attr">defaultProvider</span>: uuidV4,
        <span class="hljs-attr">keyType</span>: <span class="hljs-string">'HASH'</span>,
    },
    <span class="hljs-comment">// ...</span>
};
</code></pre>
				<h2 id="supported-types">Supported types</h2>
				<h3 id="any">Any</h3>
				<p>Will be marshalled and unmarshalled using the <code>@aws/dynamodb-auto-marshaller</code>
				package, which detects the type of a given value at runtime.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> anyProperty = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Any'</span>,
    <span class="hljs-comment">// optionally, you may specify configuration options for the</span>
    <span class="hljs-comment">// @aws/dynamodb-auto-marshaller package's Marshaller class:</span>
    unwrapNumbers: <span class="hljs-literal">false</span>,
    <span class="hljs-attr">onInvalid</span>: <span class="hljs-string">'omit'</span>,
    <span class="hljs-attr">onEmpty</span>: <span class="hljs-string">'nullify'</span>,
};
</code></pre>
				<h3 id="binary">Binary</h3>
				<p>Used for <code>ArrayBuffer</code> and <code>ArrayBufferView</code> objects, as well as Node.JS
				buffers.</p>
				<p><strong>May be used as a table or index key.</strong></p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> binaryProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Binary'</span>};
</code></pre>
				<h3 id="boolean">Boolean</h3>
				<p>Used for <code>true</code>/<code>false</code> values.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> booleanProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Boolean'</span>};
</code></pre>
				<h3 id="collection">Collection</h3>
				<p>Denotes a list of untyped items. The constituent items will be marshalled and
				unmarshalled using the <code>@aws/dynamodb-auto-marshaller</code>.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> collectionProperty = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Collection'</span>,
    <span class="hljs-comment">// optionally, you may specify configuration options for the</span>
    <span class="hljs-comment">// @aws/dynamodb-auto-marshaller package's Marshaller class:</span>
    unwrapNumbers: <span class="hljs-literal">false</span>,
    <span class="hljs-attr">onInvalid</span>: <span class="hljs-string">'omit'</span>,
    <span class="hljs-attr">onEmpty</span>: <span class="hljs-string">'nullify'</span>,
};
</code></pre>
				<h3 id="custom">Custom</h3>
				<p>Allows the use of bespoke marshalling and unmarshalling functions. The type
					definition for a <code>&#39;Custom&#39;</code> property must include a <code>marshall</code> function that
					converts the type&#39;s JavaScript representation to a DynamoDB AttributeValue and
					an <code>unmarshall</code> function that converts the AttributeValue back to a JavaScript
				value.</p>
				<p><strong>May be used as a table or index key.</strong></p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-comment">// This custom property handles strings</span>
<span class="hljs-keyword">const</span> customProperty = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Custom'</span>,
    marshall(input) {
        <span class="hljs-keyword">return</span> {<span class="hljs-attr">S</span>: input};
    },
    unmarshall(persistedValue) {
        <span class="hljs-keyword">return</span> persistedValue.S;
    }
};
</code></pre>
				<h3 id="date">Date</h3>
				<p>Used for time data. Dates will be serialized to DynamoDB as epoch timestamps
					for easy integration with DynamoDB&#39;s time-to-live feature. As a result, timezone
				information will not be persisted.</p>
				<p><strong>May be used as a table or index key.</strong></p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> dateProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Date'</span>};
</code></pre>
				<h3 id="document">Document</h3>
				<p>Used for object values that have their own schema and (optionally) constructor.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyCustomDocument</span> </span>{
    method() {
        <span class="hljs-comment">// pass</span>
    }

    get computedProperty() {
        <span class="hljs-comment">// pass</span>
    }
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">documentSchema</span> </span>= {
    <span class="hljs-attr">fizz</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>},
    <span class="hljs-attr">buzz</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>},
    <span class="hljs-attr">pop</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'Date'</span>}
}

<span class="hljs-keyword">const</span> documentProperty = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Document'</span>,
    <span class="hljs-attr">members</span>: documentSchema,
    <span class="hljs-comment">// optionally, you may specify a constructor to use to create the object</span>
    <span class="hljs-comment">// that will underlie unmarshalled instances. If not specified,</span>
    <span class="hljs-comment">// Object.create(null) will be used.</span>
    valueConstructor: MyCustomDocument
};
</code></pre>
				<h3 id="hash">Hash</h3>
				<p>Used for objects with string keys and untyped values.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> collectionProperty = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Hash'</span>,
    <span class="hljs-comment">// optionally, you may specify configuration options for the</span>
    <span class="hljs-comment">// @aws/dynamodb-auto-marshaller package's Marshaller class:</span>
    unwrapNumbers: <span class="hljs-literal">false</span>,
    <span class="hljs-attr">onInvalid</span>: <span class="hljs-string">'omit'</span>,
    <span class="hljs-attr">onEmpty</span>: <span class="hljs-string">'nullify'</span>,
};
</code></pre>
				<h3 id="list">List</h3>
				<p>Used for arrays or iterable objects whose elements are all of the same type.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> listOfStrings = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'List'</span>,
    <span class="hljs-attr">memberType</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>}
};
</code></pre>
				<h3 id="map">Map</h3>
				<p>Used for <code>Map</code> objects whose values are all of the same type.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> mapOfStrings = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Map'</span>,
    <span class="hljs-attr">memberType</span>: {<span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>}
};
</code></pre>
				<h3 id="null">Null</h3>
				<p>Used to serialize <code>null</code>. Often used as a sigil value.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> nullProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Null'</span>};
</code></pre>
				<h3 id="number">Number</h3>
				<p>Used to serialize numbers.</p>
				<p><strong>May be used as a table or index key.</strong></p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> numberProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Number'</span>};
</code></pre>
				<h3 id="set">Set</h3>
				<p>Used to serialize sets whose values are all of the same type. DynamoDB allows
				sets of numbers, sets of strings, and sets of binary values.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> binarySetProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Set'</span>, <span class="hljs-attr">memberType</span>: <span class="hljs-string">'Binary'</span>};
<span class="hljs-keyword">const</span> numberSetProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Set'</span>, <span class="hljs-attr">memberType</span>: <span class="hljs-string">'Number'</span>};
<span class="hljs-keyword">const</span> stringSetProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'Set'</span>, <span class="hljs-attr">memberType</span>: <span class="hljs-string">'String'</span>};
</code></pre>
				<h3 id="string">String</h3>
				<p>Used to serialize strings.</p>
				<p><strong>May be used as a table or index key.</strong></p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> stringProperty = {<span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>};
</code></pre>
				<h3 id="tuple">Tuple</h3>
				<p>Used to store arrays that have a specific length and sequence of elements.</p>
				<h4 id="example">Example</h4>
				<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> tupleProperty = {
    <span class="hljs-attr">type</span>: <span class="hljs-string">'Tuple'</span>,
    <span class="hljs-attr">members</span>: [
        {<span class="hljs-attr">type</span>: <span class="hljs-string">'Boolean'</span>},
        {<span class="hljs-attr">type</span>: <span class="hljs-string">'String'</span>}
    ]
};
</code></pre>
			</div>
		</div>
		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
			<nav class="tsd-navigation primary">
				<ul>
					<li class="globals  ">
						<a href="globals.html"><em>Globals</em></a>
					</li>
				</ul>
			</nav>
			<nav class="tsd-navigation secondary menu-sticky">
				<ul class="before-current">
					<li class=" tsd-kind-class">
						<a href="classes/invalidschemaerror.html" class="tsd-kind-icon">Invalid<wbr>Schema<wbr>Error</a>
					</li>
					<li class=" tsd-kind-class">
						<a href="classes/invalidvalueerror.html" class="tsd-kind-icon">Invalid<wbr>Value<wbr>Error</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/anytype.html" class="tsd-kind-icon">Any<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/attributetypemap.html" class="tsd-kind-icon">Attribute<wbr>Type<wbr>Map</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/basetype.html" class="tsd-kind-icon">Base<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/binarytype.html" class="tsd-kind-icon">Binary<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/booleantype.html" class="tsd-kind-icon">Boolean<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/collectiontype.html" class="tsd-kind-icon">Collection<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/customtype.html" class="tsd-kind-icon">Custom<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/datetype.html" class="tsd-kind-icon">Date<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/documenttype.html" class="tsd-kind-icon">Document<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/hashtype.html" class="tsd-kind-icon">Hash<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/keyschema.html" class="tsd-kind-icon">Key<wbr>Schema</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/keytypemap.html" class="tsd-kind-icon">Key<wbr>Type<wbr>Map</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/keyabletype.html" class="tsd-kind-icon">Keyable<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/listtype.html" class="tsd-kind-icon">List<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/maptype.html" class="tsd-kind-icon">Map<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/marshalledexpression.html" class="tsd-kind-icon">Marshalled<wbr>Expression</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/nulltype.html" class="tsd-kind-icon">Null<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/numbertype.html" class="tsd-kind-icon">Number<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/perindexkeys.html" class="tsd-kind-icon">Per<wbr>Index<wbr>Keys</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/schema.html" class="tsd-kind-icon">Schema</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/settype.html" class="tsd-kind-icon">Set<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface">
						<a href="interfaces/stringtype.html" class="tsd-kind-icon">String<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/tupletype.html" class="tsd-kind-icon">Tuple<wbr>Type</a>
					</li>
					<li class=" tsd-kind-interface tsd-has-type-parameter">
						<a href="interfaces/zeroargumentsconstructor.html" class="tsd-kind-icon">Zero<wbr>Arguments<wbr>Constructor</a>
					</li>
					<li class=" tsd-kind-type-alias">
						<a href="globals.html#keytype" class="tsd-kind-icon">Key<wbr>Type</a>
					</li>
					<li class=" tsd-kind-type-alias">
						<a href="globals.html#scalarattributetype" class="tsd-kind-icon">Scalar<wbr>Attribute<wbr>Type</a>
					</li>
					<li class=" tsd-kind-type-alias">
						<a href="globals.html#schematype" class="tsd-kind-icon">Schema<wbr>Type</a>
					</li>
					<li class=" tsd-kind-type-alias">
						<a href="globals.html#typetag" class="tsd-kind-icon">Type<wbr>Tag</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#getschemaname" class="tsd-kind-icon">get<wbr>Schema<wbr>Name</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#iskey" class="tsd-kind-icon">is<wbr>Key</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#isschema" class="tsd-kind-icon">is<wbr>Schema</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#isschematype" class="tsd-kind-icon">is<wbr>Schema<wbr>Type</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#keysfromschema" class="tsd-kind-icon">keys<wbr>From<wbr>Schema</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallconditionexpression" class="tsd-kind-icon">marshall<wbr>Condition<wbr>Expression</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallfunctionexpression" class="tsd-kind-icon">marshall<wbr>Function<wbr>Expression</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallitem" class="tsd-kind-icon">marshall<wbr>Item</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallkey" class="tsd-kind-icon">marshall<wbr>Key</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallmathematicalexpression" class="tsd-kind-icon">marshall<wbr>Mathematical<wbr>Expression</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallprojectionexpression" class="tsd-kind-icon">marshall<wbr>Projection<wbr>Expression</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallupdateexpression" class="tsd-kind-icon">marshall<wbr>Update<wbr>Expression</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#marshallvalue" class="tsd-kind-icon">marshall<wbr>Value</a>
					</li>
					<li class=" tsd-kind-function">
						<a href="globals.html#toschemaname" class="tsd-kind-icon">to<wbr>Schema<wbr>Name</a>
					</li>
					<li class=" tsd-kind-function tsd-has-type-parameter">
						<a href="globals.html#unmarshallitem" class="tsd-kind-icon">unmarshall<wbr>Item</a>
					</li>
					<li class=" tsd-kind-object-literal">
						<a href="globals.html#keytypes" class="tsd-kind-icon">Key<wbr>Types</a>
					</li>
					<li class=" tsd-kind-object-literal">
						<a href="globals.html#typetags" class="tsd-kind-icon">Type<wbr>Tags</a>
					</li>
				</ul>
			</nav>
		</div>
	</div>
</div>
<footer>
	<div class="container">
		<h2>Legend</h2>
		<div class="tsd-legend-group">
			<ul class="tsd-legend">
				<li class="tsd-kind-module"><span class="tsd-kind-icon">Module</span></li>
				<li class="tsd-kind-object-literal"><span class="tsd-kind-icon">Object literal</span></li>
				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
				<li class="tsd-kind-function tsd-has-type-parameter"><span class="tsd-kind-icon">Function with type parameter</span></li>
				<li class="tsd-kind-index-signature"><span class="tsd-kind-icon">Index signature</span></li>
				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-enum"><span class="tsd-kind-icon">Enumeration</span></li>
				<li class="tsd-kind-enum-member"><span class="tsd-kind-icon">Enumeration member</span></li>
				<li class="tsd-kind-property tsd-parent-kind-enum"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-enum"><span class="tsd-kind-icon">Method</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
				<li class="tsd-kind-interface tsd-has-type-parameter"><span class="tsd-kind-icon">Interface with type parameter</span></li>
				<li class="tsd-kind-constructor tsd-parent-kind-interface"><span class="tsd-kind-icon">Constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
				<li class="tsd-kind-index-signature tsd-parent-kind-interface"><span class="tsd-kind-icon">Index signature</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-class"><span class="tsd-kind-icon">Class</span></li>
				<li class="tsd-kind-class tsd-has-type-parameter"><span class="tsd-kind-icon">Class with type parameter</span></li>
				<li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class"><span class="tsd-kind-icon">Accessor</span></li>
				<li class="tsd-kind-index-signature tsd-parent-kind-class"><span class="tsd-kind-icon">Index signature</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static property</span></li>
				<li class="tsd-kind-call-signature tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static method</span></li>
			</ul>
		</div>
	</div>
</footer>
<div class="overlay"></div>
<script src="assets/js/main.js"></script>
<script>if (location.protocol == 'file:') document.write('<script src="assets/js/search.js"><' + '/script>');</script>
</body>
</html>